package com.tmxk.api.days02.zjq;

import com.tmxk.api.days01.zjq.Dog;

import java.util.*;

/**
 * @BelongsProject: java-api1
 * @BelongsPackage: com.tmxk.api.days02.zjq
 * @Author: zjq
 * @CreateTime: 2022-11-29  12:22
 * @Description: TODO
 * @Version: 1.0
 */
public class HashMapDemo02 {


    public static void main(String[] args) {


        // HashMap 是可以存储 null值
        /*
             dog1  小花   2
             dog2  花花   3
             dog3  小黑   1
             dog4  小白   5
             dog5  汪汪   6
         **/
        HashMap<String, Dog> hashMap = new HashMap<>();
        // 添加数据方法   HashMap集合对象名.put(key, value);
        // 使用HashMap集合 添加 5个 狗对象 , 迭代遍历 获取输出  狗狗名称  " -- " 狗狗年龄
        Dog dog1 = new Dog("小花", 2);
        Dog dog2 = new Dog("花花", 3);
        Dog dog3 = new Dog("小黑", 4);
        Dog dog4 = new Dog("小白", 5);
        Dog dog5 = new Dog("汪汪", 6);

        hashMap.put(dog1.getName(), dog1);
        hashMap.put(dog2.getName(), dog2);
        hashMap.put(dog3.getName(), dog3);
        hashMap.put(dog4.getName(), dog4);
        hashMap.put(dog5.getName(), dog5);

        // 使用四种方式 循环迭代遍历
        // 通过 hashMap的values进行遍历
        Collection<Dog> valuesDog = hashMap.values();
        for (Dog dog : valuesDog) {
            System.out.println(dog.getName() + " -- " + dog.getAge());
        }

        // 通过 hashMap的keySet进行遍历
        Set<String> keysDog = hashMap.keySet();
        for (String key : keysDog) {
            Dog dog = hashMap.get(key);
            System.out.println(dog.getName() + " -- " + dog.getAge());
        }

        // 迭代器遍历
        System.out.println("迭代器遍历---》迭代遍历key");
        Iterator<String> itKey = keysDog.iterator();
        while(itKey.hasNext()){
            String key = itKey.next();
            Dog dog = hashMap.get(key);
            System.out.println(dog.getName() + " -- " + dog.getAge());
        }


        System.out.println("迭代器遍历---》迭代遍历value");
        Iterator<Dog> itDog = valuesDog.iterator();
        while(itDog.hasNext()){
            Dog dog = itDog.next();
            System.out.println(dog.getName() + " -- " + dog.getAge());
        }

        //lambda表达式遍历
        hashMap.keySet().forEach(key ->{
            Dog dog = hashMap.get(key);
            System.out.println(dog.getName() + " -- " + dog.getAge());
        });

        //常识：集合对象不能在循环遍历中，执行remove（）方法，会出现ConcurrentModificationException异常
        // 但是可以通过迭代器进行remove，因为迭代器专门为集合打造的
        System.out.println(hashMap.remove("小花"));

        //Map -->k,v组成
        //entrySet() 获取一个Map整体元素
        System.out.println("将hashMap集合作为一个整体输出");
        Set<Map.Entry<String,Dog>> setMap = hashMap.entrySet();
            setMap.forEach(map ->{
                System.out.println(map);
            });


        // 获取 "小白" 是否存在 hashMap 集合元素中
        //containsKey():获取map集合对象key是否存在
        System.out.println(hashMap.containsKey("小白"));


        boolean flag = false;
        for (Dog d : hashMap.values()) {
            // String str = "汪汪".equals(d.getName()) == true ? "包含在该集合元素中" : "不包含在该集合元素中";
            if ("小白".equals(d.getName())) {
                flag = true;
                break;
            }
        }
        System.out.println(flag == true ? "包含在该集合元素中" : "不包含在该集合元素中" );

        //所有集合都有一个清除方法
        //hashMap.clear();
        //System.out.println(hashMap);


    }
}


